Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / Sideband.git / files / sbapp / mapview / clustered_marker_layer.py

Displaying Raw • Download


sbapp/mapview/clustered_marker_layer.py bbefc39fd79001dddf5dc11c09a4fcf3b9b4948b (bbefc39f) Text, 13.59 KB

T8b949e# coding=utf-8
T8b949e"""
Layer that support point clustering
===================================
"""

Tff7b72from T7ee787math Tff7b72import Te6edf3atanTb4b4b4, Te6edf3expTb4b4b4, Te6edf3floorTb4b4b4, Te6edf3logTb4b4b4, Te6edf3piTb4b4b4, Te6edf3sinTb4b4b4, Te6edf3sqrt
Tff7b72from T7ee787osT7ee787.T7ee787path Tff7b72import Te6edf3dirnameTb4b4b4, Te6edf3join

Tff7b72from T7ee787kivyT7ee787.T7ee787lang Tff7b72import Te6edf3Builder
Tff7b72from T7ee787kivyT7ee787.T7ee787metrics Tff7b72import Te6edf3dp
Tff7b72from T7ee787kivyT7ee787.T7ee787properties Tff7b72import Tb4b4b4(
Te6edf3ListPropertyTb4b4b4,
Te6edf3NumericPropertyTb4b4b4,
Te6edf3ObjectPropertyTb4b4b4,
Te6edf3StringPropertyTb4b4b4,
Tb4b4b4)

Tff7b72from T7ee787mapviewT7ee787.T7ee787view Tff7b72import Te6edf3MapLayerTb4b4b4, Te6edf3MapMarker

Te6edf3BuilderTff7b72.Td2a8ffload_stringTb4b4b4(
T8b949e"""
ClusterMapMarker>:
size_hint: None, None
source: root.source
size: list(map(dp, self.texture_size))
allow_stretch: True

Label:
color: root.text_color
pos: root.pos
size: root.size
text: "{}".format(root.num_points)
font_size: dp(18)
"""
Tb4b4b4)


T8b949e# longitude/latitude to spherical mercator in [0..1] range
Tff7b72def Td2a8fflngXTb4b4b4(Te6edf3lngTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3lng Tff7b72/ T79c0ff360.0 Tff7b72+ T79c0ff0.5


Tff7b72def Td2a8fflatYTb4b4b4(Te6edf3latTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3lat Tff7b72== T79c0ff90Tb4b4b4:
Tff7b72return T79c0ff0
Tff7b72if Te6edf3lat Tff7b72== Tff7b72-T79c0ff90Tb4b4b4:
Tff7b72return T79c0ff1
Te6edf3s Tff7b72= Te6edf3sinTb4b4b4(Te6edf3lat Tff7b72* Te6edf3pi Tff7b72/ T79c0ff180.0Tb4b4b4)
Te6edf3y Tff7b72= T79c0ff0.5 Tff7b72- T79c0ff0.25 Tff7b72* Te6edf3logTb4b4b4(Tb4b4b4(T79c0ff1 Tff7b72+ Te6edf3sTb4b4b4) Tff7b72/ Tb4b4b4(T79c0ff1 Tff7b72- Te6edf3sTb4b4b4)Tb4b4b4) Tff7b72/ Te6edf3pi
Tff7b72return Tffa657minTb4b4b4(T79c0ff1Tb4b4b4, Tffa657maxTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3yTb4b4b4)Tb4b4b4)


T8b949e# spherical mercator to longitude/latitude
Tff7b72def Td2a8ffxLngTb4b4b4(Te6edf3xTb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4(Te6edf3x Tff7b72- T79c0ff0.5Tb4b4b4) Tff7b72* T79c0ff360


Tff7b72def Td2a8ffyLatTb4b4b4(Te6edf3yTb4b4b4)Tb4b4b4:
Te6edf3y2 Tff7b72= Tb4b4b4(T79c0ff180 Tff7b72- Te6edf3y Tff7b72* T79c0ff360Tb4b4b4) Tff7b72* Te6edf3pi Tff7b72/ T79c0ff180
Tff7b72return T79c0ff360 Tff7b72* Te6edf3atanTb4b4b4(Te6edf3expTb4b4b4(Te6edf3y2Tb4b4b4)Tb4b4b4) Tff7b72/ Te6edf3pi Tff7b72- T79c0ff90


Tff7b72class T56d364KDBushTb4b4b4:
T8b949e"""
kdbush implementation from:
https://github.com/mourner/kdbush/blob/master/src/kdbush.js
"""

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3pointsTb4b4b4, Te6edf3node_sizeTff7b72=T79c0ff64Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpoints Tff7b72= Te6edf3points
Tff7b72selfTff7b72.Td2a8ffnode_size Tff7b72= Te6edf3node_size

Tff7b72selfTff7b72.Td2a8ffids Tff7b72= Te6edf3ids Tff7b72= Tb4b4b4[T79c0ff0Tb4b4b4] Tff7b72* Tffa657lenTb4b4b4(Te6edf3pointsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcoords Tff7b72= Te6edf3coords Tff7b72= Tb4b4b4[T79c0ff0Tb4b4b4] Tff7b72* Tffa657lenTb4b4b4(Te6edf3pointsTb4b4b4) Tff7b72* T79c0ff2
Tff7b72for Te6edf3iTb4b4b4, Te6edf3point Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3pointsTb4b4b4)Tb4b4b4:
Te6edf3idsTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3i
Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3iTb4b4b4] Tff7b72= Te6edf3pointTff7b72.Td2a8ffx
Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3i Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72= Te6edf3pointTff7b72.Td2a8ffy

Tff7b72selfTff7b72.Td2a8ff_sortTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3node_sizeTb4b4b4, T79c0ff0Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3idsTb4b4b4) Tff7b72- T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4)

Tff7b72def Td2a8ffrangeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3min_xTb4b4b4, Te6edf3min_yTb4b4b4, Te6edf3max_xTb4b4b4, Te6edf3max_yTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_rangeTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffidsTb4b4b4, Tff7b72selfTff7b72.Td2a8ffcoordsTb4b4b4, Te6edf3min_xTb4b4b4, Te6edf3min_yTb4b4b4, Te6edf3max_xTb4b4b4, Te6edf3max_yTb4b4b4, Tff7b72selfTff7b72.Td2a8ffnode_size
Tb4b4b4)

Tff7b72def Td2a8ffwithinTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3rTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_withinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidsTb4b4b4, Tff7b72selfTff7b72.Td2a8ffcoordsTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3rTb4b4b4, Tff7b72selfTff7b72.Td2a8ffnode_sizeTb4b4b4)

Tff7b72def Td2a8ff_sortTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3node_sizeTb4b4b4, Te6edf3leftTb4b4b4, Te6edf3rightTb4b4b4, Te6edf3depthTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3right Tff7b72- Te6edf3left Tff7b72<Tff7b72= Te6edf3node_sizeTb4b4b4:
Tff7b72return
Te6edf3m Tff7b72= Tffa657intTb4b4b4(Te6edf3floorTb4b4b4(Tb4b4b4(Te6edf3left Tff7b72+ Te6edf3rightTb4b4b4) Tff7b72/ T79c0ff2.0Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_selectTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3mTb4b4b4, Te6edf3leftTb4b4b4, Te6edf3rightTb4b4b4, Te6edf3depth Tff7b72% T79c0ff2Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_sortTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3node_sizeTb4b4b4, Te6edf3leftTb4b4b4, Te6edf3m Tff7b72- T79c0ff1Tb4b4b4, Te6edf3depth Tff7b72+ T79c0ff1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_sortTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3node_sizeTb4b4b4, Te6edf3m Tff7b72+ T79c0ff1Tb4b4b4, Te6edf3rightTb4b4b4, Te6edf3depth Tff7b72+ T79c0ff1Tb4b4b4)

Tff7b72def Td2a8ff_selectTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3kTb4b4b4, Te6edf3leftTb4b4b4, Te6edf3rightTb4b4b4, Te6edf3incTb4b4b4)Tb4b4b4:
Te6edf3swap_item Tff7b72= Tff7b72selfTff7b72.Td2a8ff_swap_item
Tff7b72while Te6edf3right Tff7b72> Te6edf3leftTb4b4b4:
Tff7b72if Tb4b4b4(Te6edf3right Tff7b72- Te6edf3leftTb4b4b4) Tff7b72> T79c0ff600Tb4b4b4:
Te6edf3n Tff7b72= Tffa657floatTb4b4b4(Te6edf3right Tff7b72- Te6edf3left Tff7b72+ T79c0ff1Tb4b4b4)
Te6edf3m Tff7b72= Te6edf3k Tff7b72- Te6edf3left Tff7b72+ T79c0ff1
Te6edf3z Tff7b72= Te6edf3logTb4b4b4(Te6edf3nTb4b4b4)
Te6edf3s Tff7b72= T79c0ff0.5 Tff7b72+ Te6edf3expTb4b4b4(T79c0ff2 Tff7b72* Te6edf3z Tff7b72/ T79c0ff3.0Tb4b4b4)
Te6edf3sd Tff7b72= T79c0ff0.5 Tff7b72* Te6edf3sqrtTb4b4b4(Te6edf3z Tff7b72* Te6edf3s Tff7b72* Tb4b4b4(Te6edf3n Tff7b72- Te6edf3sTb4b4b4) Tff7b72/ Te6edf3nTb4b4b4) Tff7b72* Tb4b4b4(Tff7b72-T79c0ff1 Tff7b72if Tb4b4b4(Te6edf3m Tff7b72- Te6edf3n Tff7b72/ T79c0ff2.0Tb4b4b4) Tff7b72< T79c0ff0 Tff7b72else T79c0ff1Tb4b4b4)
Te6edf3new_left Tff7b72= Tffa657maxTb4b4b4(Te6edf3leftTb4b4b4, Tffa657intTb4b4b4(Te6edf3floorTb4b4b4(Te6edf3k Tff7b72- Te6edf3m Tff7b72* Te6edf3s Tff7b72/ Te6edf3n Tff7b72+ Te6edf3sdTb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3new_right Tff7b72= Tffa657minTb4b4b4(Te6edf3rightTb4b4b4, Tffa657intTb4b4b4(Te6edf3floorTb4b4b4(Te6edf3k Tff7b72+ Tb4b4b4(Te6edf3n Tff7b72- Te6edf3mTb4b4b4) Tff7b72* Te6edf3s Tff7b72/ Te6edf3n Tff7b72+ Te6edf3sdTb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_selectTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3kTb4b4b4, Te6edf3new_leftTb4b4b4, Te6edf3new_rightTb4b4b4, Te6edf3incTb4b4b4)

Te6edf3t Tff7b72= Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3k Tff7b72+ Te6edf3incTb4b4b4]
Te6edf3i Tff7b72= Te6edf3left
Te6edf3j Tff7b72= Te6edf3right

Te6edf3swap_itemTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3leftTb4b4b4, Te6edf3kTb4b4b4)
Tff7b72if Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3right Tff7b72+ Te6edf3incTb4b4b4] Tff7b72> Te6edf3tTb4b4b4:
Te6edf3swap_itemTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3leftTb4b4b4, Te6edf3rightTb4b4b4)

Tff7b72while Te6edf3i Tff7b72< Te6edf3jTb4b4b4:
Te6edf3swap_itemTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3iTb4b4b4, Te6edf3jTb4b4b4)
Te6edf3i Tff7b72+Tff7b72= T79c0ff1
Te6edf3j Tff7b72-Tff7b72= T79c0ff1
Tff7b72while Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3i Tff7b72+ Te6edf3incTb4b4b4] Tff7b72< Te6edf3tTb4b4b4:
Te6edf3i Tff7b72+Tff7b72= T79c0ff1
Tff7b72while Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3j Tff7b72+ Te6edf3incTb4b4b4] Tff7b72> Te6edf3tTb4b4b4:
Te6edf3j Tff7b72-Tff7b72= T79c0ff1

Tff7b72if Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3left Tff7b72+ Te6edf3incTb4b4b4] Tff7b72== Te6edf3tTb4b4b4:
Te6edf3swap_itemTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3leftTb4b4b4, Te6edf3jTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3j Tff7b72+Tff7b72= T79c0ff1
Te6edf3swap_itemTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3jTb4b4b4, Te6edf3rightTb4b4b4)

Tff7b72if Te6edf3j Tff7b72<Tff7b72= Te6edf3kTb4b4b4:
Te6edf3left Tff7b72= Te6edf3j Tff7b72+ T79c0ff1
Tff7b72if Te6edf3k Tff7b72<Tff7b72= Te6edf3jTb4b4b4:
Te6edf3right Tff7b72= Te6edf3j Tff7b72- T79c0ff1

Tff7b72def Td2a8ff_swap_itemTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3iTb4b4b4, Te6edf3jTb4b4b4)Tb4b4b4:
Te6edf3swap Tff7b72= Tff7b72selfTff7b72.Td2a8ff_swap
Te6edf3swapTb4b4b4(Te6edf3idsTb4b4b4, Te6edf3iTb4b4b4, Te6edf3jTb4b4b4)
Te6edf3swapTb4b4b4(Te6edf3coordsTb4b4b4, T79c0ff2 Tff7b72* Te6edf3iTb4b4b4, T79c0ff2 Tff7b72* Te6edf3jTb4b4b4)
Te6edf3swapTb4b4b4(Te6edf3coordsTb4b4b4, T79c0ff2 Tff7b72* Te6edf3i Tff7b72+ T79c0ff1Tb4b4b4, T79c0ff2 Tff7b72* Te6edf3j Tff7b72+ T79c0ff1Tb4b4b4)

Tff7b72def Td2a8ff_swapTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3arrTb4b4b4, Te6edf3iTb4b4b4, Te6edf3jTb4b4b4)Tb4b4b4:
Te6edf3tmp Tff7b72= Te6edf3arrTb4b4b4[Te6edf3iTb4b4b4]
Te6edf3arrTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3arrTb4b4b4[Te6edf3jTb4b4b4]
Te6edf3arrTb4b4b4[Te6edf3jTb4b4b4] Tff7b72= Te6edf3tmp

Tff7b72def Td2a8ff_rangeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3min_xTb4b4b4, Te6edf3min_yTb4b4b4, Te6edf3max_xTb4b4b4, Te6edf3max_yTb4b4b4, Te6edf3node_sizeTb4b4b4)Tb4b4b4:
Te6edf3stack Tff7b72= Tb4b4b4[T79c0ff0Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3idsTb4b4b4) Tff7b72- T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4]
Te6edf3result Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3x Tff7b72= Te6edf3y Tff7b72= T79c0ff0

Tff7b72while Te6edf3stackTb4b4b4:
Te6edf3axis Tff7b72= Te6edf3stackTff7b72.Td2a8ffpopTb4b4b4(Tb4b4b4)
Te6edf3right Tff7b72= Te6edf3stackTff7b72.Td2a8ffpopTb4b4b4(Tb4b4b4)
Te6edf3left Tff7b72= Te6edf3stackTff7b72.Td2a8ffpopTb4b4b4(Tb4b4b4)

Tff7b72if Te6edf3right Tff7b72- Te6edf3left Tff7b72<Tff7b72= Te6edf3node_sizeTb4b4b4:
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Te6edf3leftTb4b4b4, Te6edf3right Tff7b72+ T79c0ff1Tb4b4b4)Tb4b4b4:
Te6edf3x Tff7b72= Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3iTb4b4b4]
Te6edf3y Tff7b72= Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3i Tff7b72+ T79c0ff1Tb4b4b4]
Tff7b72if Te6edf3x Tff7b72>Tff7b72= Te6edf3min_x Tff7b72and Te6edf3x Tff7b72<Tff7b72= Te6edf3max_x Tff7b72and Te6edf3y Tff7b72>Tff7b72= Te6edf3min_y Tff7b72and Te6edf3y Tff7b72<Tff7b72= Te6edf3max_yTb4b4b4:
Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Te6edf3idsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4)
Tff7b72continue

Te6edf3m Tff7b72= Tffa657intTb4b4b4(Te6edf3floorTb4b4b4(Tb4b4b4(Te6edf3left Tff7b72+ Te6edf3rightTb4b4b4) Tff7b72/ T79c0ff2.0Tb4b4b4)Tb4b4b4)

Te6edf3x Tff7b72= Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3mTb4b4b4]
Te6edf3y Tff7b72= Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3m Tff7b72+ T79c0ff1Tb4b4b4]

Tff7b72if Te6edf3x Tff7b72>Tff7b72= Te6edf3min_x Tff7b72and Te6edf3x Tff7b72<Tff7b72= Te6edf3max_x Tff7b72and Te6edf3y Tff7b72>Tff7b72= Te6edf3min_y Tff7b72and Te6edf3y Tff7b72<Tff7b72= Te6edf3max_yTb4b4b4:
Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Te6edf3idsTb4b4b4[Te6edf3mTb4b4b4]Tb4b4b4)

Te6edf3nextAxis Tff7b72= Tb4b4b4(Te6edf3axis Tff7b72+ T79c0ff1Tb4b4b4) Tff7b72% T79c0ff2

Tff7b72if Te6edf3min_x Tff7b72<Tff7b72= Te6edf3x Tff7b72if Te6edf3axis Tff7b72== T79c0ff0 Tff7b72else Te6edf3min_y Tff7b72<Tff7b72= Te6edf3yTb4b4b4:
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3leftTb4b4b4)
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3m Tff7b72- T79c0ff1Tb4b4b4)
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3nextAxisTb4b4b4)
Tff7b72if Te6edf3max_x Tff7b72>Tff7b72= Te6edf3x Tff7b72if Te6edf3axis Tff7b72== T79c0ff0 Tff7b72else Te6edf3max_y Tff7b72>Tff7b72= Te6edf3yTb4b4b4:
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3m Tff7b72+ T79c0ff1Tb4b4b4)
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3rightTb4b4b4)
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3nextAxisTb4b4b4)

Tff7b72return Te6edf3result

Tff7b72def Td2a8ff_withinTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3idsTb4b4b4, Te6edf3coordsTb4b4b4, Te6edf3qxTb4b4b4, Te6edf3qyTb4b4b4, Te6edf3rTb4b4b4, Te6edf3node_sizeTb4b4b4)Tb4b4b4:
Te6edf3sq_dist Tff7b72= Tff7b72selfTff7b72.Td2a8ff_sq_dist
Te6edf3stack Tff7b72= Tb4b4b4[T79c0ff0Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3idsTb4b4b4) Tff7b72- T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4]
Te6edf3result Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3r2 Tff7b72= Te6edf3r Tff7b72* Te6edf3r

Tff7b72while Te6edf3stackTb4b4b4:
Te6edf3axis Tff7b72= Te6edf3stackTff7b72.Td2a8ffpopTb4b4b4(Tb4b4b4)
Te6edf3right Tff7b72= Te6edf3stackTff7b72.Td2a8ffpopTb4b4b4(Tb4b4b4)
Te6edf3left Tff7b72= Te6edf3stackTff7b72.Td2a8ffpopTb4b4b4(Tb4b4b4)

Tff7b72if Te6edf3right Tff7b72- Te6edf3left Tff7b72<Tff7b72= Te6edf3node_sizeTb4b4b4:
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Te6edf3leftTb4b4b4, Te6edf3right Tff7b72+ T79c0ff1Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3sq_distTb4b4b4(Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3iTb4b4b4]Tb4b4b4, Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3i Tff7b72+ T79c0ff1Tb4b4b4]Tb4b4b4, Te6edf3qxTb4b4b4, Te6edf3qyTb4b4b4) Tff7b72<Tff7b72= Te6edf3r2Tb4b4b4:
Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Te6edf3idsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4)
Tff7b72continue

Te6edf3m Tff7b72= Tffa657intTb4b4b4(Te6edf3floorTb4b4b4(Tb4b4b4(Te6edf3left Tff7b72+ Te6edf3rightTb4b4b4) Tff7b72/ T79c0ff2.0Tb4b4b4)Tb4b4b4)

Te6edf3x Tff7b72= Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3mTb4b4b4]
Te6edf3y Tff7b72= Te6edf3coordsTb4b4b4[T79c0ff2 Tff7b72* Te6edf3m Tff7b72+ T79c0ff1Tb4b4b4]

Tff7b72if Te6edf3sq_distTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3qxTb4b4b4, Te6edf3qyTb4b4b4) Tff7b72<Tff7b72= Te6edf3r2Tb4b4b4:
Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Te6edf3idsTb4b4b4[Te6edf3mTb4b4b4]Tb4b4b4)

Te6edf3nextAxis Tff7b72= Tb4b4b4(Te6edf3axis Tff7b72+ T79c0ff1Tb4b4b4) Tff7b72% T79c0ff2

Tff7b72if Tb4b4b4(Te6edf3qx Tff7b72- Te6edf3r Tff7b72<Tff7b72= Te6edf3xTb4b4b4) Tff7b72if Te6edf3axis Tff7b72== T79c0ff0 Tff7b72else Tb4b4b4(Te6edf3qy Tff7b72- Te6edf3r Tff7b72<Tff7b72= Te6edf3yTb4b4b4)Tb4b4b4:
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3leftTb4b4b4)
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3m Tff7b72- T79c0ff1Tb4b4b4)
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3nextAxisTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3qx Tff7b72+ Te6edf3r Tff7b72>Tff7b72= Te6edf3xTb4b4b4) Tff7b72if Te6edf3axis Tff7b72== T79c0ff0 Tff7b72else Tb4b4b4(Te6edf3qy Tff7b72+ Te6edf3r Tff7b72>Tff7b72= Te6edf3yTb4b4b4)Tb4b4b4:
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3m Tff7b72+ T79c0ff1Tb4b4b4)
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3rightTb4b4b4)
Te6edf3stackTff7b72.Td2a8ffappendTb4b4b4(Te6edf3nextAxisTb4b4b4)

Tff7b72return Te6edf3result

Tff7b72def Td2a8ff_sq_distTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3axTb4b4b4, Te6edf3ayTb4b4b4, Te6edf3bxTb4b4b4, Te6edf3byTb4b4b4)Tb4b4b4:
Te6edf3dx Tff7b72= Te6edf3ax Tff7b72- Te6edf3bx
Te6edf3dy Tff7b72= Te6edf3ay Tff7b72- Te6edf3by
Tff7b72return Te6edf3dx Tff7b72* Te6edf3dx Tff7b72+ Te6edf3dy Tff7b72* Te6edf3dy


Tff7b72class T56d364ClusterTb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3num_pointsTb4b4b4, Tffa657idTb4b4b4, Te6edf3propsTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffx Tff7b72= Te6edf3x
Tff7b72selfTff7b72.Td2a8ffy Tff7b72= Te6edf3y
Tff7b72selfTff7b72.Td2a8ffnum_points Tff7b72= Te6edf3num_points
Tff7b72selfTff7b72.Td2a8ffzoom Tff7b72= Tffa657floatTb4b4b4(Ta5d6ff"Ta5d6ffinfTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffid Tff7b72= Tffa657id
Tff7b72selfTff7b72.Td2a8ffprops Tff7b72= Te6edf3props
Tff7b72selfTff7b72.Td2a8ffparent_id Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffwidget Tff7b72= Tff7b72None

T8b949e# preprocess lon/lat
Tff7b72selfTff7b72.Td2a8fflon Tff7b72= Te6edf3xLngTb4b4b4(Te6edf3xTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflat Tff7b72= Te6edf3yLatTb4b4b4(Te6edf3yTb4b4b4)


Tff7b72class T56d364MarkerTb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lonTb4b4b4, Te6edf3latTb4b4b4, Tff7b72clsTff7b72=Te6edf3MapMarkerTb4b4b4, Te6edf3optionsTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fflon Tff7b72= Te6edf3lon
Tff7b72selfTff7b72.Td2a8fflat Tff7b72= Te6edf3lat
Tff7b72selfTff7b72.Td2a8ffcls Tff7b72= Tff7b72cls
Tff7b72selfTff7b72.Td2a8ffoptions Tff7b72= Te6edf3options

T8b949e# preprocess x/y from lon/lat
Tff7b72selfTff7b72.Td2a8ffx Tff7b72= Te6edf3lngXTb4b4b4(Te6edf3lonTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffy Tff7b72= Te6edf3latYTb4b4b4(Te6edf3latTb4b4b4)

T8b949e# cluster information
Tff7b72selfTff7b72.Td2a8ffid Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffzoom Tff7b72= Tffa657floatTb4b4b4(Ta5d6ff"Ta5d6ffinfTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffparent_id Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffwidget Tff7b72= Tff7b72None

Tff7b72def Tff7b72__repr__Tb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff<Marker lon=Tffd700{}Ta5d6ff lat=Tffd700{}Ta5d6ff source=Tffd700{}Ta5d6ff>Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(
Tff7b72selfTff7b72.Td2a8fflonTb4b4b4, Tff7b72selfTff7b72.Td2a8fflatTb4b4b4, Tff7b72selfTff7b72.Td2a8ffsource
Tb4b4b4)


Tff7b72class T56d364SuperClusterTb4b4b4:
T8b949e"""Port of supercluster from mapbox in pure python
"""

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3min_zoomTff7b72=T79c0ff0Tb4b4b4, Te6edf3max_zoomTff7b72=T79c0ff16Tb4b4b4, Te6edf3radiusTff7b72=T79c0ff40Tb4b4b4, Te6edf3extentTff7b72=T79c0ff512Tb4b4b4, Te6edf3node_sizeTff7b72=T79c0ff64Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmin_zoom Tff7b72= Te6edf3min_zoom
Tff7b72selfTff7b72.Td2a8ffmax_zoom Tff7b72= Te6edf3max_zoom
Tff7b72selfTff7b72.Td2a8ffradius Tff7b72= Te6edf3radius
Tff7b72selfTff7b72.Td2a8ffextent Tff7b72= Te6edf3extent
Tff7b72selfTff7b72.Td2a8ffnode_size Tff7b72= Te6edf3node_size

Tff7b72def Td2a8ffloadTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3pointsTb4b4b4)Tb4b4b4:
T8b949e"""Load an array of markers.
Once loaded, the index is immutable.
"""
Tff7b72from T7ee787time Tff7b72import Te6edf3time

Tff7b72selfTff7b72.Td2a8fftrees Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffpoints Tff7b72= Te6edf3points

Tff7b72for Te6edf3indexTb4b4b4, Te6edf3point Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3pointsTb4b4b4)Tb4b4b4:
Te6edf3pointTff7b72.Td2a8ffid Tff7b72= Te6edf3index

Te6edf3clusters Tff7b72= Te6edf3points
Tff7b72for Te6edf3z Tff7b72in Tffa657rangeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmax_zoomTb4b4b4, Tff7b72selfTff7b72.Td2a8ffmin_zoom Tff7b72- T79c0ff1Tb4b4b4, Tff7b72-T79c0ff1Tb4b4b4)Tb4b4b4:
Te6edf3start Tff7b72= Te6edf3timeTb4b4b4(Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffbuild treeTa5d6ff"Tb4b4b4, Te6edf3zTb4b4b4)
Tff7b72selfTff7b72.Td2a8fftreesTb4b4b4[Te6edf3z Tff7b72+ T79c0ff1Tb4b4b4] Tff7b72= Te6edf3KDBushTb4b4b4(Te6edf3clustersTb4b4b4, Tff7b72selfTff7b72.Td2a8ffnode_sizeTb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffkdbushTa5d6ff"Tb4b4b4, Tb4b4b4(Te6edf3timeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3startTb4b4b4) Tff7b72* T79c0ff1000Tb4b4b4)
Te6edf3start Tff7b72= Te6edf3timeTb4b4b4(Tb4b4b4)
Te6edf3clusters Tff7b72= Tff7b72selfTff7b72.Td2a8ff_clusterTb4b4b4(Te6edf3clustersTb4b4b4, Te6edf3zTb4b4b4)
Tffa657printTb4b4b4(Tffa657lenTb4b4b4(Te6edf3clustersTb4b4b4)Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffclusteringTa5d6ff"Tb4b4b4, Tb4b4b4(Te6edf3timeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3startTb4b4b4) Tff7b72* T79c0ff1000Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fftreesTb4b4b4[Tff7b72selfTff7b72.Td2a8ffmin_zoomTb4b4b4] Tff7b72= Te6edf3KDBushTb4b4b4(Te6edf3clustersTb4b4b4, Tff7b72selfTff7b72.Td2a8ffnode_sizeTb4b4b4)

Tff7b72def Td2a8ffget_clustersTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3bboxTb4b4b4, Te6edf3zoomTb4b4b4)Tb4b4b4:
T8b949e"""For the given bbox [westLng, southLat, eastLng, northLat], and
integer zoom, returns an array of clusters and markers
"""
Te6edf3tree Tff7b72= Tff7b72selfTff7b72.Td2a8fftreesTb4b4b4[Tff7b72selfTff7b72.Td2a8ff_limit_zoomTb4b4b4(Te6edf3zoomTb4b4b4)Tb4b4b4]
Te6edf3ids Tff7b72= Te6edf3treeTff7b72.Td2a8ffrangeTb4b4b4(Te6edf3lngXTb4b4b4(Te6edf3bboxTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3latYTb4b4b4(Te6edf3bboxTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3lngXTb4b4b4(Te6edf3bboxTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3latYTb4b4b4(Te6edf3bboxTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)Tb4b4b4)
Te6edf3clusters Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Tffa657lenTb4b4b4(Te6edf3idsTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3c Tff7b72= Te6edf3treeTff7b72.Td2a8ffpointsTb4b4b4[Te6edf3idsTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4]
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3cTb4b4b4, Te6edf3ClusterTb4b4b4)Tb4b4b4:
Te6edf3clustersTff7b72.Td2a8ffappendTb4b4b4(Te6edf3cTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3clustersTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpointsTb4b4b4[Te6edf3cTff7b72.Td2a8ffidTb4b4b4]Tb4b4b4)
Tff7b72return Te6edf3clusters

Tff7b72def Td2a8ff_limit_zoomTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zTb4b4b4)Tb4b4b4:
Tff7b72return Tffa657maxTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmin_zoomTb4b4b4, Tffa657minTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmax_zoom Tff7b72+ T79c0ff1Tb4b4b4, Te6edf3zTb4b4b4)Tb4b4b4)

Tff7b72def Td2a8ff_clusterTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3pointsTb4b4b4, Te6edf3zoomTb4b4b4)Tb4b4b4:
Te6edf3clusters Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3c_append Tff7b72= Te6edf3clustersTff7b72.Td2a8ffappend
Te6edf3trees Tff7b72= Tff7b72selfTff7b72.Td2a8fftrees
Te6edf3r Tff7b72= Tff7b72selfTff7b72.Td2a8ffradius Tff7b72/ Tffa657floatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffextent Tff7b72* Tffa657powTb4b4b4(T79c0ff2Tb4b4b4, Te6edf3zoomTb4b4b4)Tb4b4b4)

T8b949e# loop through each point
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Tffa657lenTb4b4b4(Te6edf3pointsTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3p Tff7b72= Te6edf3pointsTb4b4b4[Te6edf3iTb4b4b4]
T8b949e# if we've already visited the point at this zoom level, skip it
Tff7b72if Te6edf3pTff7b72.Td2a8ffzoom Tff7b72<Tff7b72= Te6edf3zoomTb4b4b4:
Tff7b72continue
Te6edf3pTff7b72.Td2a8ffzoom Tff7b72= Te6edf3zoom

T8b949e# find all nearby points
Te6edf3tree Tff7b72= Te6edf3treesTb4b4b4[Te6edf3zoom Tff7b72+ T79c0ff1Tb4b4b4]
Te6edf3neighbor_ids Tff7b72= Te6edf3treeTff7b72.Td2a8ffwithinTb4b4b4(Te6edf3pTff7b72.Td2a8ffxTb4b4b4, Te6edf3pTff7b72.Td2a8ffyTb4b4b4, Te6edf3rTb4b4b4)

Te6edf3num_points Tff7b72= T79c0ff1
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3pTb4b4b4, Te6edf3ClusterTb4b4b4)Tb4b4b4:
Te6edf3num_points Tff7b72= Te6edf3pTff7b72.Td2a8ffnum_points
Te6edf3wx Tff7b72= Te6edf3pTff7b72.Td2a8ffx Tff7b72* Te6edf3num_points
Te6edf3wy Tff7b72= Te6edf3pTff7b72.Td2a8ffy Tff7b72* Te6edf3num_points

Te6edf3props Tff7b72= Tff7b72None

Tff7b72for Te6edf3j Tff7b72in Tffa657rangeTb4b4b4(Tffa657lenTb4b4b4(Te6edf3neighbor_idsTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3b Tff7b72= Te6edf3treeTff7b72.Td2a8ffpointsTb4b4b4[Te6edf3neighbor_idsTb4b4b4[Te6edf3jTb4b4b4]Tb4b4b4]
T8b949e# filter out neighbors that are too far or already processed
Tff7b72if Te6edf3zoom Tff7b72< Te6edf3bTff7b72.Td2a8ffzoomTb4b4b4:
Te6edf3num_points2 Tff7b72= T79c0ff1
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3bTb4b4b4, Te6edf3ClusterTb4b4b4)Tb4b4b4:
Te6edf3num_points2 Tff7b72= Te6edf3bTff7b72.Td2a8ffnum_points
T8b949e# save the zoom (so it doesn't get processed twice)
Te6edf3bTff7b72.Td2a8ffzoom Tff7b72= Te6edf3zoom
T8b949e# accumulate coordinates for calculating weighted center
Te6edf3wx Tff7b72+Tff7b72= Te6edf3bTff7b72.Td2a8ffx Tff7b72* Te6edf3num_points2
Te6edf3wy Tff7b72+Tff7b72= Te6edf3bTff7b72.Td2a8ffy Tff7b72* Te6edf3num_points2
Te6edf3num_points Tff7b72+Tff7b72= Te6edf3num_points2
Te6edf3bTff7b72.Td2a8ffparent_id Tff7b72= Te6edf3i

Tff7b72if Te6edf3num_points Tff7b72== T79c0ff1Tb4b4b4:
Te6edf3c_appendTb4b4b4(Te6edf3pTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3pTff7b72.Td2a8ffparent_id Tff7b72= Te6edf3i
Te6edf3c_appendTb4b4b4(
Te6edf3ClusterTb4b4b4(Te6edf3wx Tff7b72/ Te6edf3num_pointsTb4b4b4, Te6edf3wy Tff7b72/ Te6edf3num_pointsTb4b4b4, Te6edf3num_pointsTb4b4b4, Te6edf3iTb4b4b4, Te6edf3propsTb4b4b4)
Tb4b4b4)
Tff7b72return Te6edf3clusters


Tff7b72class T56d364ClusterMapMarkerTb4b4b4(Te6edf3MapMarkerTb4b4b4)Tb4b4b4:
Te6edf3source Tff7b72= Te6edf3StringPropertyTb4b4b4(Te6edf3joinTb4b4b4(Te6edf3dirnameTb4b4b4(Tff7b72__file__Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6fficonsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffcluster.pngTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3cluster Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Tb4b4b4)
Te6edf3num_points Tff7b72= Te6edf3NumericPropertyTb4b4b4(Tb4b4b4)
Te6edf3text_color Tff7b72= Te6edf3ListPropertyTb4b4b4(Tb4b4b4[T79c0ff0.1Tb4b4b4, T79c0ff0.1Tb4b4b4, T79c0ff0.1Tb4b4b4, T79c0ff1Tb4b4b4]Tb4b4b4)

Tff7b72def Td2a8ffon_clusterTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instanceTb4b4b4, Te6edf3clusterTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffnum_points Tff7b72= Te6edf3clusterTff7b72.Td2a8ffnum_points

Tff7b72def Td2a8ffon_touch_downTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3touchTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False


Tff7b72class T56d364ClusteredMarkerLayerTb4b4b4(Te6edf3MapLayerTb4b4b4)Tb4b4b4:
Te6edf3cluster_cls Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Te6edf3ClusterMapMarkerTb4b4b4)
Te6edf3cluster_min_zoom Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0Tb4b4b4)
Te6edf3cluster_max_zoom Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff16Tb4b4b4)
Te6edf3cluster_radius Tff7b72= Te6edf3NumericPropertyTb4b4b4(Ta5d6ff"Ta5d6ff40dpTa5d6ff"Tb4b4b4)
Te6edf3cluster_extent Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff512Tb4b4b4)
Te6edf3cluster_node_size Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff64Tb4b4b4)

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcluster Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffcluster_markers Tff7b72= Tb4b4b4[Tb4b4b4]
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)

Tff7b72def Td2a8ffadd_markerTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lonTb4b4b4, Te6edf3latTb4b4b4, Tff7b72clsTff7b72=Te6edf3MapMarkerTb4b4b4, Te6edf3optionsTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3options Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3options Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3marker Tff7b72= Te6edf3MarkerTb4b4b4(Te6edf3lonTb4b4b4, Te6edf3latTb4b4b4, Tff7b72clsTb4b4b4, Te6edf3optionsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcluster_markersTff7b72.Td2a8ffappendTb4b4b4(Te6edf3markerTb4b4b4)
Tff7b72return Te6edf3marker

Tff7b72def Td2a8ffremove_markerTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3markerTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcluster_markersTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3markerTb4b4b4)

Tff7b72def Td2a8ffrepositionTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffcluster Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbuild_clusterTb4b4b4(Tb4b4b4)
Te6edf3margin Tff7b72= Te6edf3dpTb4b4b4(T79c0ff48Tb4b4b4)
Te6edf3mapview Tff7b72= Tff7b72selfTff7b72.Td2a8ffparent
Te6edf3set_marker_position Tff7b72= Tff7b72selfTff7b72.Td2a8ffset_marker_position
Te6edf3bbox Tff7b72= Te6edf3mapviewTff7b72.Td2a8ffget_bboxTb4b4b4(Te6edf3marginTb4b4b4)
Te6edf3bbox Tff7b72= Tb4b4b4(Te6edf3bboxTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4, Te6edf3bboxTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3bboxTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4, Te6edf3bboxTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffclear_widgetsTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3point Tff7b72in Tff7b72selfTff7b72.Td2a8ffclusterTff7b72.Td2a8ffget_clustersTb4b4b4(Te6edf3bboxTb4b4b4, Te6edf3mapviewTff7b72.Td2a8ffzoomTb4b4b4)Tb4b4b4:
Te6edf3widget Tff7b72= Te6edf3pointTff7b72.Td2a8ffwidget
Tff7b72if Te6edf3widget Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3widget Tff7b72= Tff7b72selfTff7b72.Td2a8ffcreate_widget_forTb4b4b4(Te6edf3pointTb4b4b4)
Te6edf3set_marker_positionTb4b4b4(Te6edf3mapviewTb4b4b4, Te6edf3widgetTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3widgetTb4b4b4)

Tff7b72def Td2a8ffbuild_clusterTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcluster Tff7b72= Te6edf3SuperClusterTb4b4b4(
Te6edf3min_zoomTff7b72=Tff7b72selfTff7b72.Td2a8ffcluster_min_zoomTb4b4b4,
Te6edf3max_zoomTff7b72=Tff7b72selfTff7b72.Td2a8ffcluster_max_zoomTb4b4b4,
Te6edf3radiusTff7b72=Tff7b72selfTff7b72.Td2a8ffcluster_radiusTb4b4b4,
Te6edf3extentTff7b72=Tff7b72selfTff7b72.Td2a8ffcluster_extentTb4b4b4,
Te6edf3node_sizeTff7b72=Tff7b72selfTff7b72.Td2a8ffcluster_node_sizeTb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffclusterTff7b72.Td2a8ffloadTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcluster_markersTb4b4b4)

Tff7b72def Td2a8ffcreate_widget_forTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3pointTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3pointTb4b4b4, Te6edf3MarkerTb4b4b4)Tb4b4b4:
Te6edf3pointTff7b72.Td2a8ffwidget Tff7b72= Te6edf3pointTff7b72.Td2a8ffclsTb4b4b4(Te6edf3lonTff7b72=Te6edf3pointTff7b72.Td2a8fflonTb4b4b4, Te6edf3latTff7b72=Te6edf3pointTff7b72.Td2a8fflatTb4b4b4, Tff7b72*Tff7b72*Te6edf3pointTff7b72.Td2a8ffoptionsTb4b4b4)
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3pointTb4b4b4, Te6edf3ClusterTb4b4b4)Tb4b4b4:
Te6edf3pointTff7b72.Td2a8ffwidget Tff7b72= Tff7b72selfTff7b72.Td2a8ffcluster_clsTb4b4b4(Te6edf3lonTff7b72=Te6edf3pointTff7b72.Td2a8fflonTb4b4b4, Te6edf3latTff7b72=Te6edf3pointTff7b72.Td2a8fflatTb4b4b4, Te6edf3clusterTff7b72=Te6edf3pointTb4b4b4)
Tff7b72return Te6edf3pointTff7b72.Td2a8ffwidget

Tff7b72def Td2a8ffset_marker_positionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3mapviewTb4b4b4, Te6edf3markerTb4b4b4)Tb4b4b4:
Te6edf3xTb4b4b4, Te6edf3y Tff7b72= Te6edf3mapviewTff7b72.Td2a8ffget_window_xy_fromTb4b4b4(Te6edf3markerTff7b72.Td2a8fflatTb4b4b4, Te6edf3markerTff7b72.Td2a8fflonTb4b4b4, Te6edf3mapviewTff7b72.Td2a8ffzoomTb4b4b4)
Te6edf3markerTff7b72.Td2a8ffx Tff7b72= Tffa657intTb4b4b4(Te6edf3x Tff7b72- Te6edf3markerTff7b72.Td2a8ffwidth Tff7b72* Te6edf3markerTff7b72.Td2a8ffanchor_xTb4b4b4)
Te6edf3markerTff7b72.Td2a8ffy Tff7b72= Tffa657intTb4b4b4(Te6edf3y Tff7b72- Te6edf3markerTff7b72.Td2a8ffheight Tff7b72* Te6edf3markerTff7b72.Td2a8ffanchor_yTb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────